package GUI;

import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.KeyStroke;

/**
 *
 * @author Tim
 */
public class Menu implements ActionListener {

    JMenuBar menuBar = new JMenuBar();
    JMenu bestand, help, acties;
    JMenuItem afsluiten, about, uitloggen,nieuweSpeler, inloggen, wachtwoordWijzigen, registreren, spelerWijzigen, geldStorten, ratioOverzicht, spelUitleg, serverClient;
    Controller gc;

    /**
     *
     * @param gc
     */
    public Menu(Controller gc) {
        this.gc = gc;
    }

    /**
     *
     * @param menu
     */
    public void setMenu(String menu) {
        if (menu.equals("inlog")) {
            menuBar.removeAll();
            System.out.println("Debug: inlog menu geladen.");
            bestand = new JMenu("Bestand");
            bestand.setMnemonic(KeyEvent.VK_B);
            help = new JMenu("Help");

            nieuweSpeler = new JMenuItem("Nieuwe Speler", KeyEvent.VK_N);
            nieuweSpeler.addActionListener(this);

            //inloggen = new JMenuItem("Inloggen", KeyEvent.VK_I);
            //inloggen.addActionListener(this);

            registreren = new JMenuItem("Registreren", KeyEvent.VK_R);
            registreren.addActionListener(this);

            afsluiten = new JMenuItem("Afsluiten", KeyEvent.VK_U);

            spelUitleg = new JMenuItem("Spelregels");
            spelUitleg.addActionListener(this);

            about = new JMenuItem("About");
            about.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, ActionEvent.ALT_MASK));

            menuBar.add(bestand);
            menuBar.add(help);

            bestand.add(nieuweSpeler);
            //bestand.add(inloggen);
            bestand.add(registreren);
            bestand.addSeparator();
            bestand.add(afsluiten);

            help.add(spelUitleg);
            help.add(about);

            gc.setJMenuBar(menuBar);

        } else if (menu.equals("speler")) {
            menuBar.removeAll();
            System.out.println("Debug: speler menu geladen.");
            bestand = new JMenu("Bestand");
            acties = new JMenu("Acties");
            help = new JMenu("Help");

            //serverClient = new JMenuItem("Nieuw spel", KeyEvent.VK_N);
            //serverClient.addActionListener(this);

            uitloggen = new JMenuItem("Uitloggen", KeyEvent.VK_U);
            uitloggen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U, ActionEvent.ALT_MASK));
            uitloggen.addActionListener(this);

            spelerWijzigen = new JMenuItem("Gegevens wijzigen", KeyEvent.VK_G);
            spelerWijzigen.addActionListener(this);

            wachtwoordWijzigen = new JMenuItem("Wachtoord wijzigen", KeyEvent.VK_W);
            wachtwoordWijzigen.addActionListener(this);

            afsluiten = new JMenuItem("Afsluiten");

            geldStorten = new JMenuItem("Geld storten", KeyEvent.VK_S);
            geldStorten.addActionListener(this);

            ratioOverzicht = new JMenuItem("Ratio overzicht", KeyEvent.VK_O);
            ratioOverzicht.addActionListener(this);

            spelUitleg = new JMenuItem("Spelregels");
            spelUitleg.addActionListener(this);

            about = new JMenuItem("About");
            about.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, ActionEvent.ALT_MASK));
            
            menuBar.add(bestand);
            menuBar.add(acties);
            menuBar.add(help);

            //bestand.add(serverClient);
            bestand.add(uitloggen);
            bestand.addSeparator();
            bestand.add(spelerWijzigen);
            bestand.add(wachtwoordWijzigen);
            bestand.addSeparator();
            bestand.add(afsluiten);

            acties.add(geldStorten);

            help.add(ratioOverzicht);
            help.add(spelUitleg);
            help.addSeparator();
            help.add(about);

            gc.setJMenuBar(menuBar);
        }
        afsluiten.addActionListener(this);
        about.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
         if(e.getSource() == afsluiten) {
            gc.closeProgram();
         } else if(e.getSource() == uitloggen) {
             setMenu("inlog");
             gc.setGUI("inloggen");
             gc.spelerIngelogd = null;
             JOptionPane.showMessageDialog(gc, "U bent uitgelogd!");
         } else if(e.getSource() == nieuweSpeler) {
             gc.cspelers.nieuweSpeler();
         } else if(e.getSource() == inloggen) {
             gc.setGUI("inloggen");
         } else if(e.getSource() == serverClient) {
             gc.setGUI("serverclient");
         } else if(e.getSource() == wachtwoordWijzigen) {
             gc.setGUI("wachtwoordwijzigen");
         } else if(e.getSource() == spelerWijzigen) {
             gc.setGUI("spelerwijzigen");
         } else if(e.getSource() == registreren) {
             gc.setGUI("registreren");
         } else if(e.getSource() == geldStorten) {
             gc.setGUI("geldstorten");
         } else if(e.getSource() == ratioOverzicht) {
             gc.setGUI("ratiooverzicht");
         } else if(e.getSource() == spelUitleg) {
             // Komt speluitleg volgens Holland Casino
             Toolkit.getDefaultToolkit().beep();
             JOptionPane.showMessageDialog(null,"1. De puntwaarde van de speelkaarten is als volgt vastgesteld:\n   - De kaarten 2 tot en met 10 vertegenwoordigen de waarde die op de kaarten staat aangegeven;\n   - De kaarten heer, vrouw en boer vertegenwoordigen de waarde 10;\n   - De aas vertegenwoordigt de waarde 1 of 11.\n\n2. Allen de boxhouder, en niet de medespelers, neemt spelbeslissingen aan de speeltafel.\n\n3. Een oorspronkelijke hand (de eerste twee kaarten die voor een box of bank worden getrokken) met een waarde van 21 punten,\n geldt als Black Jack. Een Black Jack wordt 3:2 uitbetaald, mets de bank geen Black Jack heeft.\nAndere winnende kansen worden 1:1 uitbetaald. Een speler moet bij een bereikt puntentotaal van\n21 of hoger stoppen. Als een hand meer dan 21 puntent heeft, verliest de hand altijd.\n\n4. De bank trekt bij zestien of minder punten altijd een kaart,\nmits er nog handen in het spel zijn. Bij zeventien of meer past de bank.\nEen aas telt voor 11 punten, indien de bank met deze waarde\n17 of meer bereikt, tot een maximum van 21.\nWanneer de bank zich heeft \"doodgekocht\", winnen de nog in het spel aanwezige handen.\nAls de bank meer punten heeft dan de speler, wint de bank.\nIndien de spelers en bank hetzelfde puntenaantal hebben,\nwaaronder Black Jack is er sprake van gelijk spel. De spelers kunnen hun inzetten laten staan, wijzigen of terugnemen.\nBlack Jack wint alijd van 21 punten.\n\n5. Wanneer de eerst kaart van de bank een aas is,\nkunnen de spelers zich verzekeren tegen een Black Jack de bank.\nDe speler die zijn oorspronkelijk inzet wenst te verzekeren plaatst hiertoe een bedrag,\nter hoogte van de helft van zijn inzet. Als de bank een Black Jack heeft,\nneemt de bank de verliezende inzetten in en betaalt hij de verkeringsinzetten 2:1.\nAls de bank geen Black Jack heeft, incasseert de croupier de verzekeringsinzetten.\n\n6. De spelers mogen bij de oorspronkelijk hand met een waarde van 9, 10 of 11 punten hun\ninzet verdubbelen, waarbij slechts 1 kaart wordt getrokken.\n", "Black Jack spelregels",1);
         } else if(e.getSource() == about) {
             Toolkit.getDefaultToolkit().beep();
             JOptionPane.showMessageDialog(gc, "Versie 2.x.x (Beta)\nGemaakt door: Koen Mulder, Jelle den Butter, Frank van Eldijk en Tim Beks\nProject naam: The Jack Game\nSchool: Hogeschol van Utrecht\nFaculteit: Natuur en Techniek\nLocatie: Nijenoord 1, Utrecht");
         }
    }

}
